home *** CD-ROM | disk | FTP | other *** search
- #ifndef H_OOFquery
- #define H_OOFquery
-
- // COPYRIGHT 1994 A.D. Software, All rights reserved
-
- // IMPLEMENTATION of queries
- // known to Fields and Query implementations
-
- class dbQueryField ;
- class dbQueryLiteral;
- class dbQueryLiteralStr;
- class dbQueryBinaryCombo;
- class dbField;
- class dbCompoundField;
-
- class dbQueryClause {
- public:
- enum BinaryQueryOps {equals, notEquals, lessThan, lessThanOrEqual, greaterThan, greaterThanOrEqual, startsWith};
- enum TrinaryQueryOps {between, outside};
- enum QueryCombinatorialOps {and, or};
- enum QueryClauseTypes {binaryfieldToLiteral, binaryfieldTofield, trinaryFieldToLiterals, atomicfield, atomicLiteral, atomicLiteralStr, binaryCombination};
-
- virtual ~dbQueryClause() {};
-
- virtual dbQueryClause::QueryClauseTypes queryClauseType() const=0;
-
- // combinatorial operators
- dbQueryBinaryCombo operator&(dbQueryClause&) const;
- dbQueryBinaryCombo operator&&(dbQueryClause&) const;
- dbQueryBinaryCombo operator|(dbQueryClause&) const;
- dbQueryBinaryCombo operator||(dbQueryClause&) const;
-
- protected:
- dbQueryClause() {};
-
- // other protocol
- // part of testing dbTable *AppliesToTable();
-
- };
-
- //operator=(dbTable lhs, dbQueryClause& rhs);
-
-
- class dbQueryBinary : public dbQueryClause {
- public:
- dbQueryBinary(dbQueryField* fld, BinaryQueryOps op, dbQueryClause* litOrFld) :
- mLhs(fld),
- mRhs(litOrFld),
- mBinOp(op)
- {};
- dbQueryBinary(dbQueryBinary&);
- virtual ~dbQueryBinary();
- private:
- dbQueryBinary& operator=(dbQueryBinary&);
-
- public:
- virtual dbQueryClause::QueryClauseTypes queryClauseType() const;
- dbQueryLiteralStr* literalStrClause() const;
- dbQueryLiteral* literalClause() const;
- dbQueryClause::BinaryQueryOps binaryOperator() const;
- const dbField* lhsField() const;
-
- protected:
-
- // other protocol
- // part of testing dbTable *AppliesToTable();
-
- // data storage
- protected:
- dbQueryField *mLhs; // owned
- dbQueryClause* mRhs; // owned
- BinaryQueryOps mBinOp;
- };
-
-
- class dbQueryBinaryCombo : public dbQueryClause {
- public:
- // NOT YET IMPLEMENTED extend to any number of clauses with same op
- dbQueryBinaryCombo(const dbQueryClause* lhs, QueryCombinatorialOps op, const dbQueryClause* rhs) :
- mLhs(lhs),
- mRhs(rhs),
- mComboOp(op),
- mTempKeyStoreToDispose(0)
- {};
- dbQueryBinaryCombo(dbQueryBinaryCombo&);
- virtual ~dbQueryBinaryCombo();
- private:
- dbQueryBinaryCombo& operator=(dbQueryBinaryCombo&);
-
- public:
- virtual dbQueryClause::QueryClauseTypes queryClauseType() const;
- dbQueryClause::QueryCombinatorialOps binaryOperator() const;
- const dbQueryClause* item(unsigned int) const;
- unsigned long pairFieldsIfCouldUseCompoundIndex() const;
- dbQueryBinary makeCompoundSearch(const dbCompoundField*);
-
- protected:
-
- // other protocol
- // part of testing dbTable *AppliesToTable();
-
- // data storage
- protected:
- // NOTE unlike the other Binary and Trinary, we do NOT own our lhs & rhs
- const dbQueryClause *mLhs, *mRhs;
- QueryCombinatorialOps mComboOp;
- char* mTempKeyStoreToDispose;
- };
-
-
- class dbQueryTrinary : public dbQueryClause {
- public:
- dbQueryTrinary(dbQueryField* fld, TrinaryQueryOps op, dbQueryClause* litOrFldFrom, dbQueryClause* litOrFldTo) :
- mLhs(fld),
- mFrom(litOrFldFrom),
- mTo(litOrFldTo),
- mTrinOp(op)
- {};
- dbQueryTrinary(dbQueryTrinary&);
- virtual ~dbQueryTrinary();
- private:
- dbQueryTrinary& operator=(dbQueryTrinary&);
-
- public:
- virtual dbQueryClause::QueryClauseTypes queryClauseType() const;
- dbQueryLiteralStr* literalStrFromClause() const;
- dbQueryLiteralStr* literalStrToClause() const;
- dbQueryLiteral* literalFromClause() const;
- dbQueryLiteral* literalToClause() const;
- dbQueryClause::TrinaryQueryOps trinaryOperator() const;
- const dbField* lhsField() const;
-
- protected:
-
- // data storage
- protected:
- dbQueryField *mLhs; // owned
- dbQueryClause *mFrom, *mTo; // owned
- TrinaryQueryOps mTrinOp;
- };
-
-
- class dbQueryLiteral : public dbQueryClause {
- public:
- virtual dbQueryClause::QueryClauseTypes queryClauseType() const;
- virtual const void* binaryContents() const;
- virtual unsigned short literalLen() const;
-
- protected:
- dbQueryLiteral() {};
- };
-
-
- class dbQueryLiteralStr : public dbQueryLiteral {
- public:
- dbQueryLiteralStr(const char* str) :
- mStr(str) {};
- virtual ~dbQueryLiteralStr() {};
-
- virtual dbQueryClause::QueryClauseTypes queryClauseType() const;
- const char* Str() const;
- virtual const void* binaryContents() const;
- virtual unsigned short literalLen() const;
-
- // data storage
- private:
- const char* mStr;
- };
-
-
- class dbQueryLiteralDouble : public dbQueryLiteral {
- public:
- dbQueryLiteralDouble(double d) :
- mNum(d) {};
- virtual ~dbQueryLiteralDouble() {};
-
- virtual const void* binaryContents() const;
- virtual unsigned short literalLen() const;
-
- // data storage
- private:
- const double mNum;
- };
-
-
- class dbQueryLiteralBLOB : public dbQueryLiteral {
- // mainly used to support compound key queries ending in binary number
- public:
- dbQueryLiteralBLOB(void* blob, unsigned short len) :
- mBLOB(blob),
- mBLOBlen(len)
- {};
- virtual ~dbQueryLiteralBLOB() {};
-
- virtual const void* binaryContents() const;
- virtual unsigned short literalLen() const;
-
- // data storage
- private:
- const void* mBLOB;
- unsigned short mBLOBlen;
- };
-
-
- class dbQueryLiteralLong : public dbQueryLiteral {
- public:
- dbQueryLiteralLong(long l) :
- mNum(l) {};
- virtual ~dbQueryLiteralLong() {};
-
- virtual const void* binaryContents() const;
- virtual unsigned short literalLen() const;
-
- // data storage
- private:
- const long mNum;
- };
-
-
- class dbQueryLiteralUlong : public dbQueryLiteral {
- public:
- dbQueryLiteralUlong(unsigned long l) :
- mNum(l) {};
- virtual ~dbQueryLiteralUlong() {};
-
- virtual const void* binaryContents() const;
- virtual unsigned short literalLen() const;
-
- // data storage
- private:
- const unsigned long mNum;
- };
-
-
- class dbQueryLiteralShort : public dbQueryLiteral {
- public:
- dbQueryLiteralShort(short s) :
- mNum(s) {};
- virtual ~dbQueryLiteralShort() {};
-
- virtual const void* binaryContents() const;
- virtual unsigned short literalLen() const;
-
- // data storage
- private:
- const short mNum;
- };
-
-
- class dbQueryLiteralUshort : public dbQueryLiteral {
- public:
- dbQueryLiteralUshort(unsigned short s) :
- mNum(s) {};
- virtual~dbQueryLiteralUshort() {};
-
- virtual const void* binaryContents() const;
- virtual unsigned short literalLen() const;
-
- // data storage
- private:
- const unsigned short mNum;
- };
-
-
- class dbQueryField : public dbQueryClause {
- public:
- // constructors
- dbQueryField(const dbField* fld) :
- mfield(fld) {};
- virtual~dbQueryField() {};
-
- const dbField* field() const {return mfield;};
- virtual dbQueryClause::QueryClauseTypes queryClauseType() const;
-
- // data storage
- const dbField* mfield;
- };
-
-
- // include inline definitions
- #include "oofquery.inl"
- #endif
-